package incomeSetting

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/paylog"
)

type _updateType struct {
	Id   uint   `json:"id"`
	Name string `json:"name"`
	Icon string `json:"icon"`
}

func UpdateIncomeType(ctx *fiber.Ctx) error {
	// 解释数据
	// 数据传入为{id:自己, name:自己1}
	var dataDto _updateType
	if err := ctx.BodyParser(&dataDto); err != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": fmt.Sprintf("数据解释出错！%s", err),
		})
	}

	// 成功提取数据
	// 先获取原来的数据，判断是否有重复
	var updateObj paylog.IncomeType
	if err := global.DB.First(&updateObj, dataDto.Id); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": fmt.Sprintf("获取数据库出错！%s", err.Error),
		})
	}

	// 验证是否重复
	var incomeTypeCheckList []paylog.IncomeType
	r := global.DB.
		Where("name = ? AND user_id = ? AND id != ?", dataDto.Name, global.AuthUser.UserId, dataDto.Id).
		Find(&incomeTypeCheckList)
	if r.RowsAffected > 0 {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "收入类型不允许重复添加！",
		})
	}

	// 更新到数据库
	if len(dataDto.Name) > 0 {

		// 有传入时更新
		updateObj.Name = dataDto.Name
	}
	if len(dataDto.Icon) > 0 {

		// 有传入时更新
		updateObj.Icon = dataDto.Icon
	}
	r = global.DB.Save(&updateObj)
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "保存到数据库失败！" + r.Error.Error(),
		})
	}

	// 返回
	return ctx.JSON(fiber.Map{
		"status":  "done",
		"message": "修改成功！",
	})
}
